//引入express组件
const express = require('express');
//创建路由对象
const router = express.Router();

//引入用户模型
const User = require('../models/user');

//添加获取所有用户的接口
//api:GeT /api/users
/*
@route  GET /api/users
@desc   获取所有用户的接口
@access Public
测试用例：
http://localhost:3304/api/users
*/
//api: GET /api/users
router.get('/', async (req, res) => {
    try{    
        const users = await User.findAll(
            {
                order: [['created_at', 'ASC'],['id', 'DESC']]
            }
        );
        res.json({ status:"ok",data: users.map(user => user.toJSON() )});
    }
    catch(err){
        console.error(err);
        res.status(500).json({ status:"error", message: err.message });
    }

});

router.get('/:id',async (req,res) =>{
    try{
        const {nickName,avatarUrl,openid,active} =req.body;
        if(!nickName || nickName.trim() === '' || !nickName || nickName.length > 50){
            return res.status(400).json({status:"error",error:"用户昵称不正确"});
        }
        const newUser = await User.create({
            nickName,
            avatarUrl,
            openid,
            active
        })
        res.status(201).json({
            status:"ok",
            data:newUser.toJSON()
        });
    }catch(err){
        console.error(err);
        res.status(500).json({status:"error",error:err.message});
    }
});

router.post('/', async (req, res) => {
    try{
        //通过api接口文档与前端调用方约定好请求体格式
        const {nickName, avatarUrl,openid,active} = req.body;
        if(!nickName || nickName.trim() === '' || nickName.length > 50){
            //返回400状态码:表示参数错误
            return res.status(400).json({ status:"error", message: '用户昵称不正确' });
        }
        //手动指定参数，避免使用req.body直接传递，防止多传参数
        const newUser = await User.create({
            nickName,
            avatarUrl,
            openid,
            active
        });
        //返回201状态码，表示创建成功
        res.status(201).json({
            status: 'ok',
            data: newUser.toJSON()
        });
    }catch(err){
        console.error(err);
        res.status(500).json({status:"error",error:err.message});
    }
});
/*
POST /api/users
@route post /api/users
@desc   创建新用户
@access Public
测试用例：
1. 正常创建用户
curl -X POST http://localhost:3304/api/users -H "Content-Type: application/json" -d "{\"nickName\":\"张三24\",\"avatarUrl\":\"http://example.com/avatar.jpg\",\"openid\":\"o1234567890\",\"active\":1}"
2. 创建用户时，缺少nickName字段
curl -X POST http://localhost:3304/api/users -H "Content-Type: application/json" -d "{\"avatarUrl\":\"http://example.com/avatar.jpg\",\"openid\":\"o1234567890\",\"active\":1}" 
3. 创建用户时，nickName字段为空
curl -X POST http://localhost:3304/api/users -H "Content-Type: application/json" -d "{\"nickName\":\"  \",\"avatarUrl\":\"http://example.com/avatar.jpg\",\"openid\":\"o1234567890\",\"active\":1}"
4. 创建用户时，nickName字段过长
curl -X POST http://localhost:3304/api/users -H "Content-Type: application/json" -d "{\"nickName\":\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"avatarUrl\":\"http://example.com/avatar.jpg\",\"openid\":\"o1234567890\",\"active\":1}"
5. 创建用户时，avatarUrl字段为空
curl -X POST http://localhost:3304/api/users -H "Content-Type: application/json" -d "{\"nickName\":\"李四\",\"avatarUrl\":\"\",\"openid\":\"o1234567890\",\"active\":1}"

*/

//第一步：从请求体中获取用户数据
//第二步：验证用户数据
//第三步：调用数据库方法，创建新用户
//第四步：返回创建结果
module.exports = router;